/*
 * Copyright 2004-2005 asoft
 * 本软件及其所有拷贝的名称，与光盘上或本软件中注明的公司同在。
 * 本软件及文档享有版权，并受国家版权法及国际协约条款的保护。
 * 您不可以从本软件中去掉其版权声明；并保证为本软件的拷贝（本部或部分）* 复制版权声明。
 * 您同意制止以任何形式非法拷贝本软件及文档。
 * 版权信息参见：
 *      http://www.asoft.cn/licenses
 */

package com.asoft.common.util.mvc.objectcast.imp;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;

import com.asoft.common.base.manager.Manager;
import com.asoft.common.util.mvc.objectcast.AbstractCastor;

/**
 * 对象类型转换
 * for
 * created by amon
 */

public class StringId2BaseObject implements AbstractCastor
{
        static Logger logger = Logger.getLogger(StringId2BaseObject.class);

        public Object casting(Object sro,List Objs) throws ClassCastException
        {
                if(sro == null )
                        throw new ClassCastException("StringId2BaseObject转换失败 ： id 未传入");
                if(Objs.size() != 2)
                        throw new ClassCastException("StringId2BaseObject初始化失败： 配置不正确." +
                                                     "<param><!-- 定义在'applicationContext-manager.xml'里面的beanId --></param>" +
                                                     "<param>${applicationContext}<!-- spring's ApplicationContext --></param>");
                String id = (String)sro;
                String managerId = (String)Objs.get(0);
                ApplicationContext applicationContext = (ApplicationContext)Objs.get(1);
                Manager manager = (Manager)applicationContext.getBean(managerId);
                try
                {
                        return manager.get(id);
                }
                catch(Exception x)
                {
                        logger.error(managerId + "获取BaseObject'" + id + "'失败:" + x.toString());
                        return null;
                }
        }

}
